package com.algorithm.recursive;

import com.algorithm.ListNode;

import java.util.ArrayList;
import java.util.Stack;

/**
 * 从尾到头打印链表
 * 题目：输入一个链表的头节点，按链表从尾到头的顺序返回每个节点的值（用数组返回）
 * 方法1：使用栈先进后出的机制
 * 方法2：使用迭代方式
 *
 * 可以在牛客网搜索题号 JZ3 进行验证
 */

public class PrintListFromTailToHead {
    public static void main(String[] args) {

    }
    //递归方式实现
    ArrayList<Integer> arrayList = new ArrayList<Integer>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if (listNode != null) {
            this.printListFromTailToHead(listNode.next);
            arrayList.add(listNode.val);
        }
        return arrayList;
    }

    //使用栈实现
    public ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {
        ArrayList<Integer> res=new ArrayList<Integer>();
        Stack<Integer> s=new Stack<>();
        while(listNode!=null){
            s.push(listNode.val);
            listNode=listNode.next;
        }
        while(!s.empty()){
            res.add(s.pop());
        }
        return res;
    }


}
